package br.edu.fa7.especializao.extremeprograming.tuita.dao;

import java.util.List;

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;

import br.edu.fa7.especializao.extremeprograming.tuita.entity.Publicacao;
import br.edu.fa7.especializao.extremeprograming.tuita.entity.Seguidores;
import br.edu.fa7.especializao.extremeprograming.tuita.entity.Tuiteiro;

public interface TuiteiroDao {
	
	String GET_TUITEIRO_BY_ID="select * from Tuiteiros where idtuiteiro = #{idtuiteiro}";
	
	@Select(GET_TUITEIRO_BY_ID)
	Tuiteiro buscaTuiteiroId(Long id);
	
	@Insert("insert into Tuiteiros(nome, usuario, email, senha) values(#{nome},#{usuario},#{email},#{senha})")
	void salvar(Tuiteiro tuiteiro);

	@Insert("insert into Seguidores(idtuiteiroseguido, idtuiteiroseguidor, Data)values(#{tuiteiroseguido.id}, #{tuiteiroseguidor.id}, getDate())")
	void seguirTuiteiro(Seguidores tuiteiros);

	@Select("select * from Tuiteiros where usuario = #{usuario}")
	Tuiteiro buscarTuiteiro(Tuiteiro tuiteiro);

	@Select("select * from Tuiteiros where usuario = #{usuario}")
	Tuiteiro buscarTuiteiroByUsuario(String usuario);
	
	@Select("select a.publicacao, a.idtuiteiro from (select p.publicacao, p.idtuiteiro, p.Data from Publicacoes p where p.IDTuiteiro = #{id} union select p.publicacao, p.idtuiteiro, p.Data from Publicacoes p join Seguidores s on s.IDTuiteiroSeguidor = #{id}  and s.IDTuiteiroSeguido = p.IDTuiteiro) a order by a.Data desc")
	@Results(value = {
	        @Result(property="Publicacao", column="publicacao"),
	        @Result(property="tuiteiro", column="idtuiteiro",   javaType=Tuiteiro.class, one=@One(select="br.edu.fa7.especializao.extremeprograming.tuita.dao.TuiteiroDao.buscaTuiteiroId"))
	})
	List<Publicacao> buscarPublicacoesSeguidores(Tuiteiro tuiteiro);
	
}
